package com.example.blogsystem.utils;

import com.example.blogsystem.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.UUID;

@Slf4j
@Component
public class AddSecretUtil {

    @Autowired
    private UserMapper userMapper;

    /*
        加密方式：
        1. 获取盐值
        2. 密码+盐值通过md5算法获取到密文
        3. 数据库保存盐值+密文
     */

    public String addSecret(String password) {
        // 1)获取盐值
        //  因为这种方式获取的盐值含有‘-’，将‘-’ 去掉正好32位
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2)获取密文:盐值+密码通过md5算法
        String secret = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 3)盐值+密文 进行保存
        String finalPassword = salt + secret;
        return finalPassword;
    }

    /*
        密码校验：
        1. 从数据库中获取盐值+密文
        2. 将数据库中的盐值与输入的明文相加通过md5算法生成密文
        3. 盐值+密文与数据库中的是否相同
     */

    public boolean verifyPassword(String password, String sqlPassword) {
        log.info("sqlPassword:{}", sqlPassword);

        // 1)将数据库中的盐值
        String sqlSalt = sqlPassword.substring(0, 32);
        log.info("sqlSalt:{}", sqlSalt);
        // 2）将数据库中的盐值和明文相加通过md5算法生成密文
        String secret = DigestUtils.md5DigestAsHex((sqlSalt + password).getBytes());
        // 3) 盐值+密文与数据库中保存的盐值+密文比较
        String finPassword = sqlSalt + secret;
        log.info("finPassword:{}", finPassword);
        // 3)secret与数据库中的密码比较
        if(finPassword.equals(sqlPassword)){
            return true;
        }else{
            return false;
        }


    }


}
